package com.common.android.utils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * JSON相关工具类
 * <br>Created 2014-8-22 下午2:35:04
 * @version  
 * @author   huangyx		
 * @see 	 
 * Copyright(c) 2009-2014, TQ Digital Entertainment, All Rights Reserved
 *
 */
public class JSONUtils {
	
    /**
     * 获取JSON对象Key的值，值为String类型，不过滤null
     * <br>Created 2014-8-22 下午2:36:47
     * @param json json对象
     * @param name JSON对象Key
     * @return 返回JSON对象Key的值,Key值不存或数据错误传回0值
     * @author       huangyx
     */
	public static String getString(JSONObject json ,String name){
		if(json == null) {
		    return "";
		}
		if(json.has(name)){
			try {
				return json.getString(name);
			} catch (JSONException e) {
				e.printStackTrace();
			}
		}
		return "";
	}
	
	/**
	 * 获取JSON对象Key的值，值为String类型，过滤null
	 * <br>Created 2014-8-22 下午2:44:52
	 * @param json json对象
	 * @param name JSON对象Key
	 * @return 返回JSON对象Key的值,Key值不存或数据错误传回0值
	 * @author       huangyx
	 */
	public static String getFilterString(JSONObject json ,String name){
		if(json==null) {
		    return "";
		}
		if(json.has(name)){
			try {
				if(json.get(name)==JSONObject.NULL||json.isNull(name)){
					return "";
				}
				return json.getString(name);
			} catch (JSONException e) {
				e.printStackTrace();
			}
		}
		return "";
	}
	
	/**
	 * 获取JSON对象Key的值，值为int类型，过滤null，
	 * <br>Created 2014-8-22 下午2:45:59
	 * @param json json对象
     * @param name JSON对象key
	 * @return 返回JSON对象Key的值,Key值不存或数据错误传回0值
	 * @author       huangyx
	 */
	public static int getInt(JSONObject json ,String name){
		if(json==null) {
		    return 0;
		}
		if(json.has(name)){
			try {
				String str = json.getString(name);
				if(str == null || "".equals(str)) {
				    return 0;
				} else {
					//用正则表达式判断字符串是不为数字
					if(StringUtils.isNumeric(str)){
						return json.getInt(name);
					} else {
					    return 0;
					}
				}
			} catch (JSONException e) {
				e.printStackTrace();
			}
		}
		return 0;
	}
	
	/**
     * 获取JSON对象Key的值，值为long类型，过滤null，
     * <br>Created 2014-8-22 下午2:48:59
     * @param json json对象
     * @param name JSON对象key
     * @return 返回JSON对象Key的值,Key值不存或数据错误传回0值
     * @author       huangyx
     */
	public static long getLong(JSONObject json ,String name){
		if(json == null) {
		    return 0;
		}
		if(json.has(name)){
			try {
				String str = json.getString(name);
				if(str == null || "".equals(str)) {
				    return 0;
				} else {
					//用正则表达式判断字符串是不为数字
					if(StringUtils.isNumeric(str)){
						return json.getLong(name);
					} else {
					    return 0;
					}
				}
			} catch (JSONException e) {
				e.printStackTrace();
			}
		}
		return 0;
	}
	
	/**
     * 获取JSON对象Key的值，值为数组类型
     * <br>Created 2014-8-22 下午2:52:59
     * @param json json对象
     * @param name JSON对象key
     * @return 返回JSON对象Key的值,Key值不存或数据错误传回0值
     * @author       huangyx
     */
	public static JSONArray getJSONArray(JSONObject json ,String name){
		JSONArray jsonArray = null;
		if(json==null) {
		    return jsonArray;
		}
		if(json.has(name)){
			try {
				return json.getJSONArray(name);
			} catch (JSONException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	
	/**
     * 获取JSON对象Key的值，值为JSONObject
     * <br>Created 2014-8-22 下午2:56:59
     * @param json json对象
     * @param name JSON对象key
     * @return 返回JSON对象Key的值,Key值不存或数据错误传回0值
     * @author       huangyx
     */
	public static JSONObject getJSONObject(JSONObject json ,String name){
		if(json==null) {
		    return null;
		}
		if(json.has(name)){
			try {
				return json.getJSONObject(name);
			} catch (JSONException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	
	/**
     * 获取JSON对象Key的值，值为JSONObject类型
     * <br>Created 2014-8-22 下午2:56:59
     * @param jsonarray JSONArray对象
     * @param i 数据对的索引
     * @return 返回JSON对象指定索引Key的值,指定索引Key值不存或数据错误传回0值
     * @author       huangyx
     */
    public static JSONObject getJSONObject(JSONArray jsonarray ,int i){
        JSONObject json = null;
        if(jsonarray == null) {
            return json;
        }
        if(jsonarray.length() < i){
            return json;
        }
        
        try {
            json = jsonarray.getJSONObject(i);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return json;
    }
    
	/**
	 * 添加key-value对到json对象
	 * <br>Created 2014-8-22 下午2:57:47
	 * @param json json对象
	 * @param name key名称
	 * @param value key值
	 * @throws JSONException JSONException
	 * @author       huangyx
	 */
	public static void putString(JSONObject json ,String name,String value) throws JSONException{		
		if(json==null||value==null||"".equals(value)) {
		    return;
		} else {
		    json.put(name, value);		
		}
	}	
	
}
